package fr.template.www.presentation.bean;

import fr.template.www.facade.ProduitDto;
import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * @author lesHauts
 * Défini une ligne de panier
 * Un ligne de panier contient un produit, sa quantité
 * ainsi que son prix au moment de la sélection afin
 * d'éviter les écarts de prix en cas de commande.
 */
public class LigneProduitPanierBean {
    
    private ProduitDto produit;
    private int quantite;
    
    // PKOI ? Car lors de l'affichage du résumé des commandes
    // si on affiche le prix du produitDto en cours et que la prix
    // a évolué depuis la commande, le prix payé sera différent
    // du prix affiché
    private BigDecimal prix; 
        

    public LigneProduitPanierBean() {
        this(new ProduitDto(), 0, new BigDecimal(BigInteger.ZERO));
    }

    public LigneProduitPanierBean(ProduitDto produit, int quantite, BigDecimal prix) {
        this.produit = produit;
        this.quantite = quantite;
        this.prix = calculPrix();
    }
    
    /**
     * le prix du produit multiplié par la quantitée
     * @return le prix de la ligne
     */
    private BigDecimal calculPrix(){
        return this.produit
                .getPrix()
                .multiply(new BigDecimal(quantite));
    }

    
    // =================================================  //
    //                    GETTER - SETTER                 //
    // =================================================  //
    
    /**
     * Obtient le prix de la ligne du panier
     * @return prix de la ligne
     */
    public BigDecimal getPrix() {
        return prix.multiply(new BigDecimal(quantite));
    }

    /**Obtient la quantité de produit de la ligne 
     * @return la quantité de l'attribut produit de la ligne
     */
    public int getQuantite() {
        return quantite;
    }

    /**
     * Defini la quantite du produit de la ligne
     * @param quantite quantite
     */
    public void setQuantite(int quantite) {
        if (quantite<1) {
            quantite=0;
        }
        this.quantite = quantite;
        
    }
    
    /**
     * retourne le produit de la ligne
     * @return l'attribut ProduitDto
     */
    public ProduitDto getProduit() {
        return produit;
    }

    /** Defini le produit de la ligne
     * @param produit le produitDto 
     */
    public void setProduit(ProduitDto produit) {
        this.produit = produit;
    }
}
